import java.util.Scanner;

public class test_2_5 {

////    1.本题为填空题，只需要算出结果后，在代码中使用输出语句将所填结果输出即可。
////    小蓝准备用 256MB 的内存空间开一个数组，数组的每个元素都是 32 位 二进制整数，
////    如果不考虑程序占用的空间和维护内存需要的辅助空间，请问 256MB 的空间可以存储多少个 32 位二进制整数？
//
//    public static void main(String[] args) {
//        Scanner sc=new Scanner(System.in);
//        int num=256*1024*1024;
//        System.out.println(num/4);
//    }



//    2.题目描述
//    上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径，把路径上面的数加起来可以得到一个和，你的任务就是找到最大的和。
//    路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个数。此外，向左下走的次数与向右下走的次数相差不能超过 1。
//    输入描述
//    输入的第一行包含一个整数N(1≤N≤100)，表示三角形的行数。
//    下面的 N 行给出数字三角形。数字三角形上的数都是 0 至 100 之间的整数。
//    输出描述
//    输出一个整数，表示答案。
//    输入输出样例
//    示例
//    输入：5
//         7
//         3 8
//         8 1 0
//         2 7 4 4
//         4 5 2 6 5
//    输出：27

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n=sc.nextInt();
        int[][] arr1=new int[n+1][n+1];
        int[][] arr2=new int[n+1][n+1];
        for(int i=1;i<=n;i++){
            for(int j=1;j<=i;j++){
                arr1[i][j]=sc.nextInt();
            }
        }
        arr2[1][1]=arr1[1][1];
        for(int i=2;i<=n;i++){
            for(int j=1;j<=i;j++){
                arr2[i][j]=arr1[i][j]+Math.max(arr2[i-1][j],arr2[i-1][j-1]);
            }
        }
        if(n%2==0){
            System.out.println(Math.max(arr2[n][n/2],arr2[n][n/2+1]));
        }else{
            System.out.println(arr2[n][n/2+1]);
        }
    }

}
